/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import beans.Persona;
import bd.BD;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author PabloJesus
 */
public class PersonaDao {

    public Persona buscar(String id) {
        Persona persona = null;
        try {
            Connection conexion = BD.getInstance().getConexion();
            PreparedStatement ps = conexion.prepareStatement("SELECT * FROM tb_persona WHERE id =?");
            ps.setString(1, id);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                persona = getPersona(rs);
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersonaDao.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException(ex);
        }
        return persona;
    }

    private Persona getPersona(ResultSet rs) throws SQLException {
        Persona persona = new Persona();
        persona.setNombres(rs.getString("nombres"));
        persona.setApellidoMaterno(rs.getString("apellido_materno"));
        persona.setApellidoPaterno(rs.getString("apellido_paterno"));
        persona.setGenero(rs.getString("genero").charAt(0));
        persona.setId(rs.getString("id"));
        persona.setFechaNacimiento(rs.getDate("fecha_nacimiento"));
        return persona;
    }

    public List<Persona> listar() {
        List<Persona> lista = null;
        try {
            Connection conexion = BD.getInstance().getConexion();
            PreparedStatement ps = conexion.prepareStatement("SELECT * FROM tb_persona");            
            ResultSet rs = ps.executeQuery();
            lista = new ArrayList<Persona>();
            while(rs.next()){
                Persona persona = getPersona(rs);
                lista.add(persona);
            }            
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersonaDao.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException(ex);
        }
        return lista;
    }

    public void eliminar(Persona persona) {
        try {
            Connection conexion = BD.getInstance().getConexion();
            PreparedStatement ps = conexion.prepareStatement("DELETE FROM tb_persona WHERE id =?");            
            ps.setString(1, persona.getId());            
            if (ps.execute()) {
                // si elimino
            }else{
                // no elimino
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersonaDao.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException(ex);
        }
    }

    public void actualizar(Persona persona) {        
        try {
            Connection conexion = BD.getInstance().getConexion();
            PreparedStatement ps = conexion.prepareStatement("UPDATE tb_persona SET nombres=? , apellido_paterno=? , apellido_materno=? , genero=? WHERE id=?");
            ps.setString(1, persona.getNombres());
            ps.setString(2, persona.getApellidoPaterno());
            ps.setString(3, persona.getApellidoMaterno());
            ps.setString(4, String.valueOf(persona.getGenero()));
            ps.setString(5,persona.getId());  
            if (ps.execute()) {
                // si actu
            }else{
                // no actu
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersonaDao.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException(ex);
        }
    }

    public void agregar(Persona persona) {
        try {
            Connection conexion = BD.getInstance().getConexion();
            PreparedStatement ps = conexion.prepareStatement("INSERT INTO tb_persona (id, nombres, apellido_paterno, apellido_materno, genero, fecha_nacimiento) VALUES (?,?,?,?,?,?)");
            ps.setString(1, persona.getId());
            ps.setString(2, persona.getNombres());
            ps.setString(3, persona.getApellidoPaterno());
            ps.setString(4, persona.getApellidoMaterno());
            ps.setString(5, String.valueOf(persona.getGenero()));
            ps.setDate(6, new Date(persona.getFechaNacimiento().getTime()) );            
            if (ps.execute()) {
                // si agrego
            }else{
                // no agrego
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersonaDao.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException(ex);
        }
    }
}
